package dao;

import entidad.Lote;
import entidad.Producto;
import entidad.Proveedor;
import frontera.VentanaPrincipal;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

public class ProductoDAO {
    
    private EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
    
    public void crear(Producto object) {       
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.flush();
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public boolean eliminar(Producto object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            em.remove(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }

    public Producto leer(Producto object) {
        EntityManager em = emf.createEntityManager();
        Producto producto = null;
        Query q = em.createQuery("SELECT p FROM Producto p "
                + "WHERE p.codigo = :codigo")
                .setParameter("codigo", object.getCodigo());
        try {
            producto = (Producto) q.getSingleResult();
        } catch (NoResultException e) {
            producto = null;
        } catch (NonUniqueResultException e) {
            producto = (Producto) q.getResultList().get(0);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            em.close();
            return producto;
        }
    }
    
    public ArrayList<Producto> buscar(String str) {
        EntityManager em = emf.createEntityManager();
        
        Query q = em.createQuery("SELECT p FROM Producto p ");
//                + "WHERE p.codigo = :codigo")
//                .setParameter("codigo", str);
        
        ArrayList<Producto> ret = (ArrayList<Producto>) q.getResultList();
        
        em.close();
        return ret;
    }

    public boolean actualizar(Producto object, Producto nuevoObjeto) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            object = leer(object);
            
            object.setCantidad(nuevoObjeto.getCantidad());
            object.setLotes(nuevoObjeto.getLotes());
            object.setMarca(nuevoObjeto.getMarca());
            object.setNombre(nuevoObjeto.getNombre());
            object.setProveedores(nuevoObjeto.getProveedores());
            
            em.merge(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }
    
}
